﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.SIG.Modelo;

namespace Libreria.SIG.Negocio
{
    public class RecetaNegocio
    {
        public List<Receta> consultarRecetas(Int32 codigo, String cadenaDeConexion)
        {
            List<Receta> recetas = new List<Receta>();
            Receta listaDeRecetas = new Receta(cadenaDeConexion);
            if (codigo > 0)
            {
                recetas.Add(listaDeRecetas.consultarPorCodigo(codigo));
            }
            else
            {
                recetas = listaDeRecetas.consultar();
            }
            return recetas;
        }

        public Receta consultarReceta(Int32 codigo, String cadenaDeConexion)
        {
            Receta receta = new Receta();
            Receta listaDeRecetas = new Receta(cadenaDeConexion);
            if (codigo > 0)
            {
                receta = listaDeRecetas.consultarPorCodigo(codigo);
            }
            return receta;
        }

        public List<Receta> consultarRecetasPorTipo(Int32 TipoReceta, String cadenaDeConexion)
        {
            Receta listaDeRecetas = new Receta(cadenaDeConexion);
            if (TipoReceta > 0)
            {
                return listaDeRecetas.consultarPorTipo(TipoReceta);
            }
            else 
            {
                return listaDeRecetas.consultar();
            }
        }

       public List<Receta> consultarRecetasPorTipoTemporal(Int32 tipoDeReceta, String cadenaDeConexion)
        {
            List<Receta> recetas = new List<Receta>();
            Receta listaDeRecetas = new Receta(cadenaDeConexion);
            listaDeRecetas.Codigo = null;
            listaDeRecetas.Nombre = null;
            listaDeRecetas.Foto = null;
            listaDeRecetas.Dificultad = null;
            listaDeRecetas.Tiempo = null;
            listaDeRecetas.Calorias = null;
            listaDeRecetas.Porciones = null;
            listaDeRecetas.Instrucciones = null;
            listaDeRecetas.TipoReceta = tipoDeReceta;
            recetas = listaDeRecetas.consultar();
            return recetas;
        }

        public Dictionary<int, string> consultarAsociacion(string tipoDeAsciacion, string cadenaDeConexion)
        {
            Dictionary<int, string> tipos = new Dictionary<int, string>();
            if (tipoDeAsciacion.Equals("I")) {
                List<TipoDeIngrediente> Productos = (new TipoDeIngredienteNegocio()).consultarTiposDeIngrediente(cadenaDeConexion);
                foreach (TipoDeIngrediente  item in Productos)
                {
                    tipos.Add(item.Codigo.Value, item.Nombre);
                }

            } else if (tipoDeAsciacion.Equals("R")) {
                List<TipoDeReceta> Recetas = (new TipoDeRecetaNegocio()).consultarTiposDeReceta(cadenaDeConexion);
                foreach (TipoDeReceta  item in Recetas)
                {
                    tipos.Add(item.Codigo.Value, item.Nombre);
                }
            }

            return tipos;
        }

        public Dictionary<int, string> consultarIngredienteAsociado(string tipoDeAsciacion, Int32 codigoTipo, string cadenaDeConexion)
        {
            Dictionary<int, string> ingredientes = new Dictionary<int, string>();
            if (tipoDeAsciacion != null)
            {
                if (tipoDeAsciacion.Equals("I"))
                {
                    IngredienteNegocio inn = new IngredienteNegocio();
                    List<Ingrediente> ings = inn.consultarIngredientesPorTipo(codigoTipo, cadenaDeConexion);
                    foreach (Ingrediente item in ings)
                    {
                        ingredientes.Add(item.Codigo.Value, item.Nombre);
                    }
                }
                else if (tipoDeAsciacion.Equals("R"))
                {
                    RecetaNegocio rect = new RecetaNegocio();
                    //List<Receta> rects = rect.consultarRecetas(codigoTipo, cadenaDeConexion);
                    List<Receta> rects = rect.consultarRecetasPorTipo(codigoTipo, cadenaDeConexion);
                    foreach (Receta item in rects)
                    {
                        ingredientes.Add(item.Codigo.Value, item.Nombre);
                    }
                }
            }

            return ingredientes;
        }

        public String consultarUnidadMedidaDeIngredienteAsociado(string tipoDeAsciacion, Int32 codigo, string cadenaDeConexion)
        {
            String unidadMedida = String.Empty;
            if (tipoDeAsciacion != null)
            {
                if (tipoDeAsciacion.Equals("I"))
                {
                    IngredienteNegocio inn = new IngredienteNegocio();
                    Ingrediente item = inn.consultarIngrediente(codigo, cadenaDeConexion);
                    unidadMedida = item.UnidadDeMedida;
                }
                else if (tipoDeAsciacion.Equals("R"))
                {
                    unidadMedida = "Receta";
                }
            }

            return unidadMedida;
        }


        public Int32 eliminarReceta(Int32 Codigo, String cadenaDeConexion)
        {
            Receta recetaAEliminar = new Receta(cadenaDeConexion);
            recetaAEliminar.Codigo = Codigo;
            recetaAEliminar.Nombre = null;
            recetaAEliminar.Foto = null;
            recetaAEliminar.Dificultad = null;
            recetaAEliminar.Tiempo = null;
            recetaAEliminar.Calorias = null;
            recetaAEliminar.Porciones = null;
            recetaAEliminar.Instrucciones = null;
            recetaAEliminar.TipoReceta = null;
            try
            {
                recetaAEliminar.eliminar();
            }
            catch (Exception)
            {
            }
            return recetaAEliminar.Codigo.Value;
        }

        [Obsolete("Este método no debe er utilizado, ya que se agrego el campo autor de receta")]
        public Int32 actualizarReceta(Int32 Codigo, String Nombre, String Foto, Int32 Dificultad, Int32 Tiempo, Int32 Calorias, Int32 Porciones, String Instrucciones, Int32 TipoReceta, String cadenaDeConexion)
        {
            Receta recetaAActualizar = new Receta(cadenaDeConexion);
            recetaAActualizar.Codigo = Codigo;
            recetaAActualizar.Nombre = Nombre;
            recetaAActualizar.Foto = Foto + @"\" + Codigo.ToString();
            recetaAActualizar.Dificultad = Dificultad;
            recetaAActualizar.Tiempo = Tiempo;
            recetaAActualizar.Calorias = Calorias;
            recetaAActualizar.Porciones = Porciones;
            recetaAActualizar.Instrucciones = Instrucciones;
            recetaAActualizar.TipoReceta = TipoReceta;
            recetaAActualizar.actualizar();

            return recetaAActualizar.Codigo.Value;
        }

        public Int32 actualizarReceta(Int32 Codigo, String Nombre, String Foto, Int32 Dificultad, Int32 Tiempo, Int32 Calorias, Int32 Porciones, String Instrucciones, Int32 TipoReceta, String AutorReceta, String cadenaDeConexion)
        {
            Receta recetaAActualizar = new Receta(cadenaDeConexion);
            recetaAActualizar.Codigo = Codigo;
            recetaAActualizar.Nombre = Nombre;
            recetaAActualizar.Foto = Foto + @"\" + Codigo.ToString();
            recetaAActualizar.Dificultad = Dificultad;
            recetaAActualizar.Tiempo = Tiempo;
            recetaAActualizar.Calorias = Calorias;
            recetaAActualizar.Porciones = Porciones;
            recetaAActualizar.Instrucciones = Instrucciones;
            recetaAActualizar.TipoReceta = TipoReceta;
            recetaAActualizar.AutorReceta = AutorReceta;
            recetaAActualizar.actualizar();

            return recetaAActualizar.Codigo.Value;
        }

        [Obsolete("Este método no debe er utilizado, ya que se agrego el campo autor de receta")]
        public Int32 crearReceta(Int32 Codigo, String Nombre, String Foto, Int32 Dificultad, Int32 Tiempo, Int32 Calorias, Int32 Porciones, String Instrucciones, Int32 TipoReceta, String cadenaDeConexion)
        {
            Receta recetaACrear = new Receta(cadenaDeConexion);
            recetaACrear.Codigo = Codigo;
            recetaACrear.Nombre = Nombre;
            recetaACrear.Foto = null;
            recetaACrear.Dificultad = Dificultad;
            recetaACrear.Tiempo = Tiempo;
            recetaACrear.Calorias = Calorias;
            recetaACrear.Porciones = Porciones;
            recetaACrear.Instrucciones = Instrucciones;
            recetaACrear.TipoReceta = TipoReceta;
            recetaACrear.crear();

            recetaACrear.Nombre = null;
            recetaACrear.Foto = Foto + @"\" + recetaACrear.Codigo.ToString();
            recetaACrear.Dificultad = null;
            recetaACrear.Tiempo = null;
            recetaACrear.Calorias = null;
            recetaACrear.Porciones = null;
            recetaACrear.Instrucciones = null;
            recetaACrear.TipoReceta = null;
            recetaACrear.actualizar();

            return recetaACrear.Codigo.Value;
        }

        public Int32 crearReceta(Int32 Codigo, String Nombre, String Foto, Int32 Dificultad, Int32 Tiempo, Int32 Calorias, Int32 Porciones, String Instrucciones, Int32 TipoReceta, String AutorReceta, String cadenaDeConexion)
        {
            Receta recetaACrear = new Receta(cadenaDeConexion);
            recetaACrear.Codigo = Codigo;
            recetaACrear.Nombre = Nombre;
            recetaACrear.Foto = null;
            recetaACrear.Dificultad = Dificultad;
            recetaACrear.Tiempo = Tiempo;
            recetaACrear.Calorias = Calorias;
            recetaACrear.Porciones = Porciones;
            recetaACrear.Instrucciones = Instrucciones;
            recetaACrear.TipoReceta = TipoReceta;
            recetaACrear.AutorReceta = AutorReceta;
            recetaACrear.crear();

            recetaACrear.Nombre = null;
            recetaACrear.Foto = Foto + @"\" + recetaACrear.Codigo.ToString();
            recetaACrear.Dificultad = null;
            recetaACrear.Tiempo = null;
            recetaACrear.Calorias = null;
            recetaACrear.Porciones = null;
            recetaACrear.Instrucciones = null;
            recetaACrear.TipoReceta = null;
            recetaACrear.AutorReceta = null;
            recetaACrear.actualizar();

            return recetaACrear.Codigo.Value;
        }



    }
}
